home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / X11R4 / cmds / X / ddx / cfb / cfb8bit.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-02-15  |  5.0 KB  |  192 lines

  1. /*
  2.  * cfb8bit.h
  3.  *
  4.  * Defines which are only useful to 8 bit color frame buffers
  5.  */
  6.  
  7. /*
  8. Copyright 1989 by the Massachusetts Institute of Technology
  9.  
  10. Permission to use, copy, modify, and distribute this software and its
  11. documentation for any purpose and without fee is hereby granted,
  12. provided that the above copyright notice appear in all copies and that
  13. both that copyright notice and this permission notice appear in
  14. supporting documentation, and that the name of M.I.T. not be used in
  15. advertising or publicity pertaining to distribution of the software
  16. without specific, written prior permission.  M.I.T. makes no
  17. representations about the suitability of this software for any
  18. purpose.  It is provided "as is" without express or implied warranty.
  19. */
  20.  
  21. /* $XConsortium: cfb8bit.h,v 1.7 89/11/21 15:31:36 keith Exp $ */
  22.  
  23. #if (PPW == 4)
  24.  
  25. #include "servermd.h"
  26.  
  27. #if (BITMAP_BIT_ORDER == MSBFirst)
  28. #define GetFourBits(x)        (((unsigned long) (x)) >> 28)
  29. #define NextFourBits(x)        ((x) <<= 4)
  30. #else
  31. #define GetFourBits(x)        ((x) & 0xf)
  32. #define NextFourBits(x)        ((x) >>= 4)
  33. #endif
  34.  
  35. #define GetFourPixels(x)    (cfb8Pixels[GetFourBits(x)])
  36.  
  37. extern unsigned long        cfb8Pixels[16];
  38. extern unsigned long        cfb8Pixelsfg;
  39. extern unsigned long        cfb8Pixelsbg;
  40. extern unsigned long        cfb8PixelMasks[16];
  41.  
  42. extern void            cfb8SetPixels ();
  43.  
  44. #define cfb8CheckPixels(fg, bg) \
  45.     (((fg) & 0xff) == cfb8Pixelsfg && ((bg) & 0xff) == cfb8Pixelsbg)
  46.  
  47. /*
  48.  * WriteFourBits takes the destination address, a pixel
  49.  * value (which must be 8 bits duplicated 4 time with PFILL)
  50.  * and the four bits to write, which must be in the low order
  51.  * bits of the register (probably from GetFourBits) and writes
  52.  * the appropriate locations in memory with the pixel value.  This
  53.  * is a copy-mode only operation.
  54.  */
  55.  
  56. #ifndef AVOID_MEMORY_READ
  57.  
  58. #define WriteFourBits(dst,pixel,bits)                \
  59.     {                                \
  60.     register unsigned long _maskTmp = cfb8PixelMasks[(bits)];   \
  61.     *(dst) = (*(dst) & ~_maskTmp) | ((pixel) & _maskTmp);    \
  62.     }
  63.  
  64. #else /* AVOID_MEMORY_READ */
  65.  
  66. #if (BITMAP_BIT_ORDER == MSBFirst)
  67. #define WriteFourBits(dst,pixel,bits) \
  68.     switch (bits) {            \
  69.     case 0:                \
  70.         break;            \
  71.     case 1:                \
  72.         ((char *) (dst))[3] = (pixel);    \
  73.         break;            \
  74.     case 2:                \
  75.         ((char *) (dst))[2] = (pixel);    \
  76.         break;            \
  77.     case 3:                \
  78.         ((short *) (dst))[1] = (pixel);    \
  79.         break;            \
  80.     case 4:                \
  81.         ((char *) (dst))[1] = (pixel);    \
  82.         break;            \
  83.     case 5:                \
  84.         ((char *) (dst))[3] = (pixel);    \
  85.         ((char *) (dst))[1] = (pixel);    \
  86.         break;            \
  87.     case 6:                \
  88.         ((char *) (dst))[2] = (pixel);    \
  89.         ((char *) (dst))[1] = (pixel);    \
  90.         break;            \
  91.     case 7:                \
  92.         ((short *) (dst))[1] = (pixel);    \
  93.         ((char *) (dst))[1] = (pixel);    \
  94.         break;            \
  95.     case 8:                \
  96.         ((char *) (dst))[0] = (pixel);    \
  97.         break;            \
  98.     case 9:                \
  99.         ((char *) (dst))[3] = (pixel);    \
  100.         ((char *) (dst))[0] = (pixel);    \
  101.         break;            \
  102.     case 10:            \
  103.         ((char *) (dst))[2] = (pixel);    \
  104.         ((char *) (dst))[0] = (pixel);    \
  105.         break;            \
  106.     case 11:            \
  107.         ((short *) (dst))[1] = (pixel);    \
  108.         ((char *) (dst))[0] = (pixel);    \
  109.         break;            \
  110.     case 12:            \
  111.         ((short *) (dst))[0] = (pixel);    \
  112.         break;            \
  113.     case 13:            \
  114.         ((char *) (dst))[3] = (pixel);    \
  115.         ((short *) (dst))[0] = (pixel);    \
  116.         break;            \
  117.     case 14:            \
  118.         ((char *) (dst))[2] = (pixel);    \
  119.         ((short *) (dst))[0] = (pixel);    \
  120.         break;            \
  121.     case 15:            \
  122.         ((long *) (dst))[0] = (pixel);    \
  123.         break;            \
  124.     }
  125. #else /* BITMAP_BIT_ORDER */
  126.  
  127. #define WriteFourBits(dst,pixel,bits) \
  128.     switch (bits) {            \
  129.     case 0:                \
  130.         break;            \
  131.     case 1:                \
  132.         ((char *) (dst))[0] = (pixel);    \
  133.         break;            \
  134.     case 2:                \
  135.         ((char *) (dst))[1] = (pixel);    \
  136.         break;            \
  137.     case 3:                \
  138.         ((short *) (dst))[0] = (pixel);    \
  139.         break;            \
  140.     case 4:                \
  141.         ((char *) (dst))[2] = (pixel);    \
  142.         break;            \
  143.     case 5:                \
  144.         ((char *) (dst))[0] = (pixel);    \
  145.         ((char *) (dst))[2] = (pixel);    \
  146.         break;            \
  147.     case 6:                \
  148.         ((char *) (dst))[1] = (pixel);    \
  149.         ((char *) (dst))[2] = (pixel);    \
  150.         break;            \
  151.     case 7:                \
  152.         ((short *) (dst))[0] = (pixel);    \
  153.         ((char *) (dst))[2] = (pixel);    \
  154.         break;            \
  155.     case 8:                \
  156.         ((char *) (dst))[3] = (pixel);    \
  157.         break;            \
  158.     case 9:                \
  159.         ((char *) (dst))[0] = (pixel);    \
  160.         ((char *) (dst))[3] = (pixel);    \
  161.         break;            \
  162.     case 10:            \
  163.         ((char *) (dst))[1] = (pixel);    \
  164.         ((char *) (dst))[3] = (pixel);    \
  165.         break;            \
  166.     case 11:            \
  167.         ((short *) (dst))[0] = (pixel);    \
  168.         ((char *) (dst))[3] = (pixel);    \
  169.         break;            \
  170.     case 12:            \
  171.         ((short *) (dst))[1] = (pixel);    \
  172.         break;            \
  173.     case 13:            \
  174.         ((char *) (dst))[0] = (pixel);    \
  175.         ((short *) (dst))[1] = (pixel);    \
  176.         break;            \
  177.     case 14:            \
  178.         ((char *) (dst))[1] = (pixel);    \
  179.         ((short *) (dst))[1] = (pixel);    \
  180.         break;            \
  181.     case 15:            \
  182.         ((long *) (dst))[0] = (pixel);    \
  183.         break;            \
  184.     }
  185. # endif /* BITMAP_BIT_ORDER */
  186. #endif /* AVOID_MEMORY_READ */
  187.  
  188. extern unsigned long    cfb8BitLenMasks[32];
  189. extern int        cfb8ComputeClipMasks32 ();
  190.  
  191. #endif /* PPW == 4 */
  192.